home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
datelib.exe
/
CHECKDAT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-27
|
7KB
|
223 lines
static char checkdate_prog[] = "@(#)Testung auf gültiges Datum";
static char checkdate_ver[] = "@(#)ver 1.20/kr ; 14.05.91";
/* checkdate Funktion testet auf gültigen Datum-String
**
** Autor Klaus Rath
**
** Deklaration
**
** Übergabe Die Funktion erwartet einen String in einem der folgenden
** Formate :
** tt.mm.[jj]jj -- Deutsches Format (format: 1,2)
** mm/tt/[jj]jj -- Amerikanisches Format (format: 3,4)
** [jj]jjmmtt -- Datenbankformat DDB/4 (format: 5,6)
** tt.mm. | mm/tt -- Kurzformat deutsch/am. (format: 7,8)
** Rückgabe int [format|FALSE] wobei z.Zt. 1 <= format <=8
**
** Anmerkungen Die Funktion berücksichtigt vollständig Schaltjahre - durch
** Aufruf der Funktion 'int schalt_jahr(int jahr)', die dem-
** entsprechend mit eingebunden werden muß.
** Sollte kein Jahrhundert im Übergabestring angegeben worden
** sein, ermittelt die Funktion das Default-Jahrhundert aus
** der Systemzeit !
** Entsprechendes gilt, falls auch kein Jahr vorhanden ist.
** Der Bereich, in dem checkdate arbeiten kann, liegt
** zwischen dem 01.01.0000 und dem 31.12.9999 !!!
** Änderungen 1.10 ; 13.04.91
** Die Funktion gibt jetzt den Format-Typ des übergebenen
** Datums-String zurück. Werte siehe datum.h !
** 1.20 ; 14.05.91
** Neue Formate 7 und 8 eingebaut.
*/
#include <stdio.h>
#include <string.h>
#include <time.h>
#ifdef __TURBOC__
#define ANSI
#define MSDOS
#include <stdlib.h>
#include <sys\types.h>
#else
#include <sys/types.h>
#endif
#include "datum.h"
#ifdef ANSI
int checkdate(char *dstring)
#else
int checkdate(dstring)
char *dstring;
#endif
{
char tag_s[3];
char monat_s[3];
char jahr_s[3];
char jh_s[3];
int tag_z;
int monat_z;
int jahr_z;
int jh_z;
int laenge;
char systemzeit_s[26];
time_t systemzeit;
int jahreszahl;
int format;
/* Längenüberprüfung :
*/
laenge = strlen(dstring);
if ( laenge == 5 || laenge == 6 || laenge == 8 || laenge == 10 )
;
else
return(FALSE);
/* Jahrhundert und Jahr aus der Systemzeit ermitteln und vorbelegen :
*/
time(&systemzeit);
strcpy(systemzeit_s,ctime(&systemzeit));
jh_s[0] = systemzeit_s[20];
jh_s[1] = systemzeit_s[21];
jh_s[2] = '\0';
jahr_s[0] = systemzeit_s[22];
jahr_s[1] = systemzeit_s[23];
jahr_s[2] = '\0';
/* Format überprüfen und umkopieren :
*/
if ( dstring[2] == '.' && dstring[5] == '.' ) { /* deutsches Format */
tag_s[0] = dstring[0];
tag_s[1] = dstring[1];
tag_s[2] = '\0';
monat_s[0] = dstring[3];
monat_s[1] = dstring[4];
monat_s[2] = '\0';
if ( laenge == 10 ) {
jh_s[0] = dstring[6];
jh_s[1] = dstring[7];
jh_s[2] = '\0';
jahr_s[0] = dstring[8];
jahr_s[1] = dstring[9];
jahr_s[2] = '\0';
format = DE_LANG;
}
else if ( laenge == 8 ) {
jahr_s[0] = dstring[6];
jahr_s[1] = dstring[7];
jahr_s[2] = '\0';
format = DE_KURZ;
}
else if ( laenge == 6 ) {
format = DE_AKTJAHR;
}
else
return(FALSE);
} /* ENDE: Deutsches Format */
else if ( dstring[2] == '/'
&& ( dstring[5] == '/' || laenge == 5 ) ) { /* amerik.Format */
tag_s[0] = dstring[3];
tag_s[1] = dstring[4];
tag_s[2] = '\0';
monat_s[0] = dstring[0];
monat_s[1] = dstring[1];
monat_s[2] = '\0';
if ( laenge == 10 ) {
jh_s[0] = dstring[6];
jh_s[1] = dstring[7];
jh_s[2] = '\0';
jahr_s[0] = dstring[8];
jahr_s[1] = dstring[9];
jahr_s[2] = '\0';
format = AM_LANG;
}
else if ( laenge == 8 ) {
jahr_s[0] = dstring[6];
jahr_s[1] = dstring[7];
jahr_s[2] = '\0';
format = AM_KURZ;
}
else if ( laenge == 5 ) {
format = AM_AKTJAHR;
}
else
return(FALSE);
} /* ENDE: Amerikanisches Format */
else if ( atol(dstring) != (long)NULL ) { /* Datenbank-Format */
if ( laenge == 8 ) {
jh_s[0] = dstring[0];
jh_s[1] = dstring[1];
jh_s[2] = '\0';
jahr_s[0] = dstring[2];
jahr_s[1] = dstring[3];
jahr_s[2] = '\0';
tag_s[0] = dstring[6];
tag_s[1] = dstring[7];
tag_s[2] = '\0';
monat_s[0] = dstring[4];
monat_s[1] = dstring[5];
monat_s[2] = '\0';
format = DB_LANG;
}
else if ( laenge == 6 ) {
jahr_s[0] = dstring[0];
jahr_s[1] = dstring[1];
jahr_s[2] = '\0';
tag_s[0] = dstring[4];
tag_s[1] = dstring[5];
tag_s[2] = '\0';
monat_s[0] = dstring[2];
monat_s[1] = dstring[3];
monat_s[2] = '\0';
format = DB_KURZ;
}
else
return(FALSE);
} /* ENDE: Datenbankformat */
else
return(FALSE);
/* ENDE:if(Formatprüfung und Kopierung) */
/* Konvertierung :
*/
if ( ( (tag_z = atoi(tag_s)) == 0 )
||
( (monat_z = atoi(monat_s)) == 0 )
)
return(FALSE);
jh_z = atoi(jh_s);
jahr_z = atoi(jahr_s);
if ( monat_z > 12 || monat_z < 0 || tag_z < 0 || jahr_z < 0 || jh_z < 0 )
return(FALSE);
switch ( monat_z ) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : if ( tag_z > 31 )
return(FALSE);
break;
case 4 :
case 6 :
case 9 :
case 11 : if ( tag_z > 30 )
return(FALSE);
break;
case 2 : jahreszahl = jh_z*100 + jahr_z;
if ( schalt_jahr(jahreszahl) == TRUE ) {
if ( tag_z > 29 )
return(FALSE);
}
else
if ( tag_z > 28 )
return(FALSE);
break;
} /* ENDE: switch */
return(format);
} /* ENDE: checkdate() */